package com.xuewei.pagedemo.generator;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;


/**
 * 代码生成器
 *
 * @author WD
 */
public class MyBatisPlusGenerator {
    //表名
    private static final String TABLE = "t_user";
    //实体名
    private static final String TABLEPREFIX = "User";
    //作者
    private static final String AUTHORNAME = "zhangxuewei";
    //包名
    private static final String PACKAGENAME = "com.xuewei.pagedemo";
    //主键类型
    private static final IdType ID_TYPE = IdType.ASSIGN_UUID;
    //模块名
    private static final String MODULEPATH = "";//父工程不需要填写

    public static void main(String[] args) {
        // 代码生成器
        new AutoGenerator().setGlobalConfig(
                // 全局配置
                new GlobalConfig()
                        //日期生成策略
                        .setDateType(DateType.ONLY_DATE)
                        //输出目录
                        .setOutputDir(System.getProperty("user.dir") + MODULEPATH + "/src/main/java")
                        // 是否覆盖文件
                        .setFileOverride(true)
                        // XML ResultMap
                        .setBaseResultMap(true)
                        // XML columList
                        .setBaseColumnList(true)
                        //是否打开输出目录
                        .setOpen(false)
                        // 主键生成策略
                        .setIdType(ID_TYPE)
                        //作者
                        .setAuthor(AUTHORNAME)
        ).setDataSource(
                // 数据源配置
                new DataSourceConfig()
                        .setDbType(DbType.MYSQL)
                        .setTypeConvert(new MySqlTypeConvert() {
                        })
                        .setDriverName("com.mysql.cj.jdbc.Driver")
                        .setUsername("root")
                        .setPassword("lnats@WeaVer")
                        .setUrl("jdbc:mysql://192.167.0.125:3306/xuewei?useUnicode=true&characterEncoding=utf8&nullCatalogMeansCurrent=true&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8")
        ).setStrategy(
                // 策略配置
                new StrategyConfig()
                        //表名生成策略
                        .setNaming(NamingStrategy.underline_to_camel)
                        //需要生成的表
                        .setInclude(TABLE)
                        //RestController
                        .setRestControllerStyle(true)
                        //是否为lombok模型
                        .setEntityLombokModel(true)
                        //链式
                        //.setChainModel(true)
                        .setSuperServiceClass("com.baomidou.mybatisplus.extension.service.IService")
                        .setSuperServiceImplClass("com.baomidou.mybatisplus.extension.service.impl.ServiceImpl")
                        .setTablePrefix(TABLEPREFIX)
        ).setPackageInfo(
                // 包配置
                new PackageConfig()
                        // 自定义包路径
                        .setParent(PACKAGENAME)
                        .setController("controller")
                        .setEntity("entity")
                        .setMapper("mapper")
                        .setService("service")
                        .setServiceImpl("service.impl")
                        .setXml("mapper/xml")
        ).setTemplate(
                //设置为null则不生成对应类
                new TemplateConfig()
//                        .setController(null)
//                        .setMapper(null)
//                        .setService(null)
//                        .setServiceImpl(null)
//                        .setXml(null)
//                        .setVo(null)
                     //   .setEntity(null)
        ).execute();
    }
}

